/** * Copyright (C) 2010 EdgyTech LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.edgytech.umongo; import com.edgytech.swingfast.ComboBox; import com.edgytech.swingfast.DynamicComboBox; import com.edgytech.swingfast.FormDialog; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCursor; import com.mongodb.DBObject; import java.util.HashSet; /** * * @author antoine */ public class TagRangeDialog extends FormDialog { enum Item { min, max, tag } public TagRangeDialog() { setEnumBinding(Item.values(), null); } void resetForEdit(DB config, BasicDBObject range) { xmlLoadCheckpoint(); ((DocBuilderField)getBoundUnit(Item.min)).setDBObject((DBObject) range.get("min")); ((DocBuilderField)getBoundUnit(Item.min)).enabled = false; ((DocBuilderField)getBoundUnit(Item.max)).setDBObject((DBObject) range.get("max")); ((DynamicComboBox)getBoundUnit(Item.tag)).items = getExistingTags(config); setStringFieldValue(Item.tag, range.getString("tag")); updateComponent(); } void resetForNew(DB config, String ns) { xmlLoadCheckpoint(); DBObject collection = config.getCollection("collections").findOne(new BasicDBObject("_id", ns)); DBObject shardKey = (DBObject) collection.get("key"); ((DocBuilderField)getBoundUnit(Item.min)).setDBObject(shardKey); ((DocBuilderField)getBoundUnit(Item.max)).setDBObject(shardKey); ((DynamicComboBox)getBoundUnit(Item.tag)).items = getExistingTags(config); updateComponent(); } BasicDBObject getRange(String ns) { DBObject min = ((DocBuilderField)getBoundUnit(Item.min)).getDBObject(); DBObject max = ((DocBuilderField)getBoundUnit(Item.max)).getDBObject(); BasicDBObject range = new BasicDBObject("_id", new BasicDBObject("ns", ns).append("min", min)); range.put("ns", ns); range.put("min", min); range.put("max", max); range.put("tag", getStringFieldValue(Item.tag)); return range; } static String[] getExistingTags(DB config) { DBCursor cur = config.getCollection("shards").find(); HashSet<String> tags = new HashSet<String>(); while (cur.hasNext()) { DBObject shard = cur.next(); if (shard.containsField("tags")) { BasicDBList list = (BasicDBList) shard.get("tags"); for (Object tag : list) { tags.add((String) tag); } } } return tags.toArray(new String[tags.size()]); } }